package com.intelligent.mapper;

import com.intelligent.pojo.ProductionWorkOrders;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Date;
import java.util.Map;

/**
* @author lenovo
* @description 针对表【production_work_orders(生产工单质表)】的数据库操作Mapper
* @createDate 2025-09-04 10:06:51
* @Entity com.intelligent.pojo.ProductionWorkOrders
*/
public interface ProductionWorkOrdersMapper extends BaseMapper<ProductionWorkOrders> {

    IPage<Map<String, Object>> selectPageWithConditions(
            Page<?> page,
            @Param("workOrderNo") String workOrderNo,
            @Param("status") Integer status,
            @Param("productCode") String productCode,
            @Param("productName") String productName,
            @Param("overtimeStatus") Integer overtimeStatus,
            @Param("plannedStartBegin") Date plannedStartBegin,
            @Param("plannedStartEnd") Date plannedStartEnd,
            @Param("plannedCompletionBegin") Date plannedCompletionBegin,
            @Param("plannedCompletionEnd") Date plannedCompletionEnd,
            @Param("username") String username
    );

    /**
     * 插入生产工单
     * @param productionWorkOrders 生产工单对象
     * @return 影响行数
     */
    int insertProductionWorkOrder(ProductionWorkOrders productionWorkOrders);

    /**
     * 根据前缀查询最大ID
     * @param prefix 工单编号前缀
     * @return 最大ID
     */
    Long selectMaxIdByPrefix(@Param("prefix") String prefix);

    /**
     * 更新生产工单
     * @param productionWorkOrders 生产工单对象
     * @return 影响行数
     */
    int updateProductionWorkOrder(ProductionWorkOrders productionWorkOrders);

    /**
     * 根据ID删除生产工单
     * @param id 工单ID
     * @return 影响行数
     */
    int deleteByIdCustom(@Param("id") Long id);

    /**
     * 根据ID查询生产工单详情（含产品、单位、用户信息）
     * @param id 工单ID
     * @return 详情信息
     */
    Map<String, Object> selectDetailsById(@Param("id") Long id);
}




